home *** CD-ROM | disk | FTP | other *** search
/ ADA Programming Guide / ADA Programming Guide.iso / ada_pcdp / ada / mon.ada < prev    next >
Text File  |  1996-01-30  |  1KB  |  65 lines

  1. package Monitor_Package is
  2.  
  3.   task Monitor is
  4.     entry Enter;
  5.     entry Leave;
  6.   end Monitor;
  7.  
  8.   task type Condition is
  9.     entry Signal;
  10.     entry Wait;
  11.     entry Waiting(B: out Boolean);
  12.   end Condition;
  13.  
  14.   function Non_Empty(C: Condition) return Boolean;
  15.  
  16. end Monitor_Package;
  17.  
  18. package body Monitor_Package is
  19.  
  20.   task body Monitor is
  21.   begin
  22.     loop
  23.       accept Enter;
  24.       accept Leave;
  25.     end loop;
  26.   end Monitor;
  27.  
  28.   task body Condition is
  29.   begin
  30.     loop
  31.       select
  32.         when Wait'Count = 0 =>
  33.           accept Signal do
  34.             Monitor.Leave;
  35.           end Signal;
  36.       or
  37.         accept Wait do
  38.           loop
  39.             select
  40.               accept Signal;
  41.               exit;
  42.             or
  43.               accept Waiting(B: out Boolean) do
  44.                 B := True;
  45.               end Waiting;
  46.             end select;
  47.           end loop;
  48.         end Wait;
  49.       or
  50.         accept Waiting(B: out Boolean) do
  51.           B := Wait'Count /= 0;
  52.         end Waiting;
  53.       end select;
  54.     end loop;
  55.   end Condition;
  56.  
  57.   function Non_Empty(C: Condition) return Boolean is
  58.     B: Boolean;
  59.   begin
  60.     C.Waiting(B);
  61.     return B;
  62.   end Non_Empty;
  63.  
  64. end Monitor_Package;
  65.